import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 小数精度测试类
 * 验证转换为吨后保留2位小数的效果
 */
public class DecimalPrecisionTest {
    
    public static void main(String[] args) {
        System.out.println("=== 转换为吨后保留2位小数测试 ===");
        
        // 测试 kg 转吨（保留2位小数）
        testKgToTonWith2Decimals();
        
        // 测试 g 转吨（保留2位小数）
        testGToTonWith2Decimals();
        
        // 测试边界情况
        testEdgeCasesWith2Decimals();
    }
    
    /**
     * 测试 kg 转吨（保留2位小数）
     */
    private static void testKgToTonWith2Decimals() {
        System.out.println("\n--- kg 转吨测试（保留2位小数）---");
        
        // 1000kg = 1.00吨
        BigDecimal kg1000 = new BigDecimal("1000");
        BigDecimal result1 = convertKgToTon(kg1000);
        System.out.println("1000kg = " + result1 + "吨 (期望: 1.00)");
        
        // 500kg = 0.50吨
        BigDecimal kg500 = new BigDecimal("500");
        BigDecimal result2 = convertKgToTon(kg500);
        System.out.println("500kg = " + result2 + "吨 (期望: 0.50)");
        
        // 1kg = 0.00吨（四舍五入）
        BigDecimal kg1 = new BigDecimal("1");
        BigDecimal result3 = convertKgToTon(kg1);
        System.out.println("1kg = " + result3 + "吨 (期望: 0.00)");
        
        // 1500kg = 1.50吨
        BigDecimal kg1500 = new BigDecimal("1500");
        BigDecimal result4 = convertKgToTon(kg1500);
        System.out.println("1500kg = " + result4 + "吨 (期望: 1.50)");
        
        // 1234kg = 1.23吨
        BigDecimal kg1234 = new BigDecimal("1234");
        BigDecimal result5 = convertKgToTon(kg1234);
        System.out.println("1234kg = " + result5 + "吨 (期望: 1.23)");
        
        // 1235kg = 1.24吨（四舍五入）
        BigDecimal kg1235 = new BigDecimal("1235");
        BigDecimal result6 = convertKgToTon(kg1235);
        System.out.println("1235kg = " + result6 + "吨 (期望: 1.24)");
    }
    
    /**
     * 测试 g 转吨（保留2位小数）
     */
    private static void testGToTonWith2Decimals() {
        System.out.println("\n--- g 转吨测试（保留2位小数）---");
        
        // 1000000g = 1.00吨
        BigDecimal g1000000 = new BigDecimal("1000000");
        BigDecimal result1 = convertGToTon(g1000000);
        System.out.println("1000000g = " + result1 + "吨 (期望: 1.00)");
        
        // 500000g = 0.50吨
        BigDecimal g500000 = new BigDecimal("500000");
        BigDecimal result2 = convertGToTon(g500000);
        System.out.println("500000g = " + result2 + "吨 (期望: 0.50)");
        
        // 1000g = 0.00吨（四舍五入）
        BigDecimal g1000 = new BigDecimal("1000");
        BigDecimal result3 = convertGToTon(g1000);
        System.out.println("1000g = " + result3 + "吨 (期望: 0.00)");
        
        // 10000g = 0.01吨
        BigDecimal g10000 = new BigDecimal("10000");
        BigDecimal result4 = convertGToTon(g10000);
        System.out.println("10000g = " + result4 + "吨 (期望: 0.01)");
        
        // 1234567g = 1.23吨
        BigDecimal g1234567 = new BigDecimal("1234567");
        BigDecimal result5 = convertGToTon(g1234567);
        System.out.println("1234567g = " + result5 + "吨 (期望: 1.23)");
    }
    
    /**
     * 测试边界情况（保留2位小数）
     */
    private static void testEdgeCasesWith2Decimals() {
        System.out.println("\n--- 边界情况测试（保留2位小数）---");
        
        // 0kg = 0.00吨
        BigDecimal kg0 = new BigDecimal("0");
        BigDecimal result1 = convertKgToTon(kg0);
        System.out.println("0kg = " + result1 + "吨 (期望: 0.00)");
        
        // 0g = 0.00吨
        BigDecimal g0 = new BigDecimal("0");
        BigDecimal result2 = convertGToTon(g0);
        System.out.println("0g = " + result2 + "吨 (期望: 0.00)");
        
        // 很小的数值测试四舍五入
        BigDecimal kg4 = new BigDecimal("4");  // 0.004吨 -> 0.00吨
        BigDecimal result3 = convertKgToTon(kg4);
        System.out.println("4kg = " + result3 + "吨 (期望: 0.00)");
        
        BigDecimal kg5 = new BigDecimal("5");  // 0.005吨 -> 0.01吨
        BigDecimal result4 = convertKgToTon(kg5);
        System.out.println("5kg = " + result4 + "吨 (期望: 0.01)");
    }
    
    /**
     * kg 转吨（保留2位小数）
     */
    private static BigDecimal convertKgToTon(BigDecimal kg) {
        return kg.divide(new BigDecimal("1000"), 2, RoundingMode.HALF_UP);
    }
    
    /**
     * g 转吨（保留2位小数）
     */
    private static BigDecimal convertGToTon(BigDecimal g) {
        return g.divide(new BigDecimal("1000000"), 2, RoundingMode.HALF_UP);
    }
}
